Joining IBM-1130 Cobol and Fortran-EMU compilers - Spanish

El Sistema Operativo de la computadora IBM-1130 se distribuía en un gran paquete de tarjetas perforadas formado por una serie de "módulos" marcados con letreros escritos a mano con plumón sobre la orilla de las tarjetas, como "OS", "Fortran", "Cobol", "Rpg", "Assembler", "Fortran Lib.", etc. Este paquete se colocaba en la lectora de tarjetas precedido por una tarjeta Initial Program Load que leía y ejecutaba un pequeño programa colocado en seguida, el cual ejecutaba a su vez el programa encargado de leer el paquete completo para inicializar un disco. Cuando la carga terminaba se obtenía un disco con el Sistema Operativo listo para trabajar. Sin embargo, el compilador de FORTRAN-IV proporcionado por IBM no era una implementación completa del lenguaje y carecía de soporte para el tipo de datos LOGICAL, que era una característica muy utilizada por los usuarios. Por alguna razón desconocida, IBM nunca liberó una actualización del compilador FORTRAN que resolviera este punto.

Como frecuentemente sucede en casos como éste, el compilador FORTRAN de la IBM-1130 fue modificado por una institución educativa, la Eastern Michigan University, que lo actualizaba a la versión completa de FORTRAN-IV con algunas características adicionales, como extender el nombre de las variables a 6 caracteres. Este compilador, llamado "FORTRAN-EMU", era distribuído gratuitamente en forma de una gran paquete de tarjetas perforadas a cualquier universidad que tuviera una IBM-1130, y el CECAFI ciertamente había recibido una copia. Sin embargo, al contrario del paquete de tarjetas de IBM, el paquete FORTRAN-EMU no tenía ninguna indicación escrita. Después de que el paquete completo era procesado, se obtenía un disco de sistema que sólo tenía instalados al compilador FORTRAN-EMU y al ensamblador, es decir, no incluía los compiladores COBOL ni RPG. En la Facultad de Ingeniería se daban varios cursos diferentes sobre lenguajes de programación orientados a diversas áreas, y COBOL era utilizado en unos cuantos. Como resultado de esta situación, los alumnos que utilizaban COBOL usualmente tenían que esperar hasta que un gran número de programas COBOL se acumulaba en el escritorio de servicios del CECAFI, ya que su proceso requería cambiar el disco de la computadora y no era conveniente repetir ese proceso con frecuencia. Sin embargo, cuando había un examen en alguna materia que utilizaba COBOL, el CECAFI le daba preferencia y en este caso eran los alumnos que utilizaban FORTRAN los que tenían que esperar. Cuando yo entré al CECAFI ya se habían hecho varios intentos de conjuntar los compiladores IBM COBOL y FORTRAN-EMU en un mismo disco, pero sin éxito.

El método lógico para hacer esto era tomar el módulo marcado "COBOL" del paquete de tarjetas de IBM y añadirlo a un disco de Sistema Operativo que tuviera FORTRAN-EMU, pero por alguna razón este método no funcionaba. Estudié este problema en la documentación del Sistema Operativo de la IBM-1130 tratando de entender el problema. Los discos de Sistema Operativo estaban divididos en tres áreas: el "Área de Sistema" que contenía al Sistema Operativo y a los compiladores, el "Área de Usuario" que guardaba las bibliotecas de los compiladores y programas de usuario, y el "Almacenamiento de Trabajo" utilizado por los compiladores para crear archivos con código ejecutable. Después de una compilación exitosa el programa ejecutable recién creado se podía pasar de Working Storage a User Area (que sólo implicaba mover el final de la User Area después del programa), convirtiéndolo en un programa de usuario disponible para todos. Al principio de System y User áreas estaban sus directorios, llamados "Fixed Logical Equivalence Table" (FLET) para System Area, y el mismo término sin el "Fixed" para la User Area (LET).

Esquema de un disco de sistema IBM-1130 estándar

     /    SYSTEM   AREA    \ /    USER   AREA    \ / Working Storage \
    ┌─┬───┬───┬───┬───┬───┬─┬─┬───┬───┬───┬───┬───┬───────────────────┐
    │F│   │   │   │   │   │ │ │   │   │   │   │   │                   │
    │L│O S│FOR│COB│RPG│ASM│ │L│For│Cob│Asm│Usr│Usr│                   │
    │E│   │   │   │   │   │ │E│Lib│Lib│Lib│Lib│Prg│                   │
    │T│   │   │   │   │   │ │T│   │   │   │   │   │                   │
    └─┴───┴───┴───┴───┴───┴─┴─┴───┴───┴───┴───┴───┴───────────────────┘
             Cushion Area: ^

Entre el último módulo de la System Area y la LET podía haber un pequeño espacio sobrante, llamado "Cushion Area", que se insertaba como relleno para hacer que la User Area comenzara al principio de un sector físico del disco. Esta área podía crecer si un compilador se borraba de la System Area. Cuando analicé el disco FORTRAN-EMU descubrí que sólo contenía al compilador FORTRAN y al ensamblador, y tenía una Cushion Area muy pequeña que no era suficiente para recibir al compilador COBOL, ni siquiera borrando al ensamblador.

Esquema del disco de sistema FORTRAN-EMU

     / SYSTEM AREA \ /USER A.\ /          Working   Storage          \
    ┌─┬───┬───┬───┬─┬─┬───┬───┬───────────────────────────────────────┐
    │F│   │   │   │ │ │   │   │                                       │
    │L│O S│FOR│ASM│ │L│For│Asm│                                       │
    │E│   │EMU│   │ │E│Emu│Lib│                                       │
    │T│   │   │   │ │T│Lib│   │                                       │
    └─┴───┴───┴───┴─┴─┴───┴───┴───────────────────────────────────────┘
     Cushion Area: ^

El Disk Utility Program (DUP) proporcionado con el Sistema Operativo permitía tomar programas individuales de la User Area y volcarlas en tarjetas perforadas, pero esto no era posible con partes (compiladores) que estuvieran en la System Area. Si esto hubiera sido posible, el problema se hubiera resuelto facilmente, ya que sólo bastaría con pasar el compilador FORTRAN-EMU a tarjetas perforadas y utilizarlas para reemplazar al módulo FORTRAN en el paquete original de IBM. Por otro lado, el paquete de tarjetas FORTRAN-EMU no tenía ningún formato, ya que fue creado como una imagen de disco sin ninguna división.


La documentación del Sistema Operativo indicaba los sitios en el disco en donde se almacenaban los parámetros de configuración en localidades fijas. Estos parámetros incluían el tamaño de la System Area (que también indicaba la posición de la LET) y el tamaño de la Cushion Area. Con esta información escribí un pequeño programa en ensamblador que modificaba ciertos parámetros y zonas del disco con valores específicos. Este programa me permitió conjuntar los compiladores FORTRAN-EMU e IBM COBOL en un mismo disco mediante el siguiente procedimiento:

  1. El primer paso era crear un disco FORTRAN-EMU según el último esquema antes mostrado.
  2. Con este disco se pasaban las bibliotecas del compilador FORTRAN-EMU y del ensamblador a tarjetas perforadas. Este paso sólo era necesario hacerlo una vez.
  3. Ejecutaba mi programa el cual modificaba la configuración del disco de esta forma:
    1. El tamaño de la System Area se aumentaba de tal forma que la Cushion Area tuviera espacio suficiente para albergar al compilador COBOL.
    2. En la nueva posición de la User Area se inicializaba una nueva LET, que estaba vacía. Por supuesto, este paso causaba que las bibliotecas de FORTRAN-EMU y del ensamblador se perdieran.

    Disco FORTRAN-EMU después de mi modificación

         /  SYSTEM  AREA  \ U /            Working   Storage             \
        ┌─┬───┬───┬───┬────┬─┬────────────────────────────────────────────┐
        │F│   │   │   │    │ │                                            │
        │L│O S│FOR│ASM│    │l│                                            │
        │E│   │EMU│   │    │e│                                            │
        │T│   │   │   │    │t│                                            │
        └─┴───┴───┴───┴────┴─┴────────────────────────────────────────────┘
         Cushion Area: ^^^^
    
  4. Las bibiotecas FORTRAN-EMU y ensamblador se recuperaban usando el paquete de tarjetas perforadas creadas en el paso #2.
  5. Finalmente, el compilador COBOL se cargaba en la User Area que ahora tenía espacio suficiente para él. Esto se hacía usando el módulo marcado "COBOL" del paquete original de tarjetas perforadas de IBM.

Recuerdo con claridad el gran número de tarjetas perforadas que requería este método y el largo tiempo que tomaba su proceso. El Lic. Heriberto Olguín Romo, jefe del CECAFI en ese entonces, me dijo que otras instituciones que tenían computadoras IBM-1130 estaban muy interesadas en mi solución y me pidió mi autorización para compartirla con ellos. Aunque yo acepté, por supuesto, hasta donde yo sé, mi solución a este problema no fue utilizada en ninguna otra computadora IBM-1130.